#include "compile_run.hpp"
#include <jsoncpp/json/json.h>
#include <fstream>
#include  "../common/httplib.h"
//命令行传入指定端口
int main(  int argc, char **argv)
{ 
    //获取参数中的端口号
    if(argc !=2)
    {
        std::cout<<"Usage:./compiler_server port\n";
        return 0;
    }
    int16_t port = atoi(argv[1]);
    if(port <= 0)
    {
        std::cout<<"port must be a positive number\n";
        return 0;
    }
    using namespace httplib;
    Server svr;
    // svr.Get("/",[](const Request& req,Response& resp)
    // {
    //     std::cout<<"This is A test\n"; 
    // });
    svr.Post("/compile_and_run",[](const Request& req,Response& resp){
        std::string input_json = req.body;
        std::string output = "";
        if(!input_json.empty())
        {
            //收到post请求
            std::cout<<"收到post请求\n";
            ns_compile_run::CompileAndRun::Start(input_json,&output);
            resp.set_content(output,"application/json;charset=utf-8");
        }
    });
    svr.listen("0.0.0.0",port);




    //如下是测试编译运行模块
    /*
    * json匹配规则
    *输入,json_input
    * code:用户提交的代码
    * input:用户的输入
    * CPU_limit:
    * Memory_limit:
    * 输出,json_output:
    * status:状态码
    *   *-2：一般是系统调用打开文件等操作失败
    *   *-3：编译报错
    * reason：请求结果
    * 可能有的输出：
    * stdout:程序运行的输出
    * stderr:程序运行的标准错误输出
    */
    // Json::Value root;
    // std::fstream fs("test.cc",std::fstream::app | std::fstream::in);
    // std::string content_code;
    // std::string tmp;
    // while(!fs.eof())
    // {
    //     std::getline(fs,tmp);
    //     content_code += tmp+ "\n";
    // }
    // root["code"] = content_code;
    // root["input"] = 1234;
    // root["CPU_limit"] = 10;
    // root["Memory_limit"] = 1024*100;//100MB

    // std::string outstr;
    // Json::Value out;
    // ns_compile_run::CompileAndRun::Start(root.toStyledString(),&outstr);
    // std::cout<<outstr;
    // jis>>out;
    // std::cout<<out;
    return 0;
}